package main

import (
	"fmt"
)

/*
实现一个输出前 30 个整数的阶乘的程序。

n 的阶乘定义为：n! = n * (n-1)!, 0! = 1，因此它非常适合使用递归函数来实现。
*/
func main() {
	for i := uint64(0); i < 30; i++ {
		fmt.Println(i, "! = ", factorial(i))
	}

	for i := uint64(0); i < 30; i++ {
		fmt.Println(i, "! = ", factorial2(i))
	}
}

// unnamed return variables:
func factorial(n uint64) uint64 {
	if n == 0 {
		return 1
	}
	return n * factorial(n-1)
}

// named return variables:
func factorial2(n uint64) (fac uint64) {
	fac = 1
	if n > 1 {
		fac = n * factorial2(n-1)
	}
	return
}
